]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
panelMenu: Port to using ClickGesture
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 26 Sep 2025 03:25:15 +0000 (05:25 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 5 Nov 2025 10:33:50 +0000 (11:33 +0100)
Only enable this gesture if a menu is set, so there's no
overlap with other gestures in buttons without a menu (e.g.
the ActivitiesButton).

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3912>

js/ui/panelMenu.js

index a46a78b2ba74ae9ed8239f83ca114fffc097970f..b2ec479e58bd0bf9b35344850002c8c0094c7151 100644 (file)
@@ -102,6 +102,14 @@ export const Button = GObject.registerClass({
             accessible_role: Atk.Role.MENU,
         });
 
+        this._clickGesture = new Clutter.ClickGesture();
+        this._clickGesture.set_recognize_on_press(true);
+        this._clickGesture.connect('recognize', () => {
+            this.menu?.toggle();
+        });
+        this._clickGesture.set_enabled(!dontCreateMenu);
+        this.add_action(this._clickGesture);
+
         if (dontCreateMenu)
             this.menu = new PopupMenu.PopupDummyMenu(this);
         else
@@ -130,18 +138,10 @@ export const Button = GObject.registerClass({
             Main.uiGroup.add_child(this.menu.actor);
             this.menu.actor.hide();
         }
+        this._clickGesture.set_enabled(this.menu !== null);
         this.emit('menu-set');
     }
 
-    vfunc_event(event) {
-        if (this.menu &&
-            (event.type() === Clutter.EventType.TOUCH_BEGIN ||
-             event.type() === Clutter.EventType.BUTTON_PRESS))
-            this.menu.toggle();
-
-        return Clutter.EVENT_PROPAGATE;
-    }
-
     vfunc_hide() {
         super.vfunc_hide();